/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package hojatrabajo1;

import java.text.DecimalFormat;

/**
 *
 * @author Steven
 */
public class Radio3 implements iRadio {
    
public boolean on_off;            //Indica si el radio esta encendido o apagado:   TRUE: On    FALSE: Off
public boolean fm_am;             //Indica si el radio esta en am o fm:            TRUE: FM    FALSE: AM
public double estacion_actual;    //Contiene la estación actual del radio
public double estacion_boton[]= new double[12];         //Contiene la estación de radio almacenada en cada boton 
final double PENDIENTE = 59.34065934;                           //
final double INTERCEPTO = 4792.857143;                          //PENDIENTE e INTERCEPTO utilizados para pasar de AM a FM y viceversa
DecimalFormat formatear = new DecimalFormat("###.#");
 

    public Radio3(boolean on_off, boolean fm_am, double estacion_actual) {
        this.on_off=on_off;
        this.fm_am=fm_am;
        this.estacion_actual=estacion_actual;
        for(int i=0;i<12;i++){
            estacion_boton[i]=0;
                                }
    }
        
    @Override
    public boolean Power() 
    {  if(on_off){                                             //Si el radio esta encendido
                        on_off=false;                          //...apagar.
                }else{                                         //Si el radio esta apagado
                        on_off=true;                           //...encender
                }
                return on_off;
    }
    
    @Override
    public boolean ChangeSignal()
    {
         if(on_off){
                        if(fm_am){
                                fm_am=false;                    //Si estaba en FM (TRUE), cambiar a AM (FALSE)
                                estacion_actual=(PENDIENTE * estacion_actual)-INTERCEPTO;       // Cambiar a la estacion correspondiente
                                estacion_actual=(int)((estacion_actual+1)/10);                          // Obtener la estacion como multiplo de 10
                                estacion_actual*=10;
                                System.out.println(" -- Ha cambiado a AM exitosamente -- ");
                        }else{
                                fm_am=true;                             //Si estaba en AM (FALSE), cambiar a FM (TRUE)
                                estacion_actual=(estacion_actual + INTERCEPTO)/PENDIENTE;
                                System.out.println(" -- Ha cambiado a FM exitosamente -- ");
                        }
                }else{
                        System.out.println(" -- DEBE ENCENDER EL RADIO -- ");
                }
                return fm_am;                           //Devolver el estado cambiado
        }
    
    
    @Override
    public float NextFreq()
    {
       if(on_off){
                    if(fm_am){                                              //Si la radio esta en FM
                               estacion_actual+=0.2;                        //Sumar 0.2
                                if(estacion_actual>107.9){                  //Si ya nos pasamos de la ultima estacion
                                        estacion_actual=87.9;               //Regresar a la primera
                                }else{
                                        
                                }                               
                        }else{                                               //Si la radio esta en AM
                                estacion_actual+=10;                         //Sumar 10
                                if(estacion_actual>1610){                    //Si ya nos pasamos de la ultima estacion
                                        estacion_actual=530;                 //Regresar a la primera
                                }else{
                                        
                                }               
                        }
                }else{
                        System.out.println("   -- DEBE ENCENDER EL RADIO --   ");
                }
                return (float) estacion_actual;
        }

 
    @Override
    public boolean SaveFreq(int Boton)
    {
        // TODO Auto-generated method stub
                if(on_off){
                        Boton-=1;
                        if((Boton<12)&&(Boton>-1)){
                                estacion_boton[Boton]=estacion_actual;
                                System.out.println(" -- Se ha guardado la estacion "+formatear.format(estacion_actual)+" en el boton "+(Boton+1));
                        }
                }else{
                        System.out.println("   -- DEBE ENCENDER EL RADIO --   ");
                }
     return fm_am;
    }
    
    @Override
    
    public float ChangeTune(int Boton)
    {
        // TODO Auto-generated method stub
                Boton-=1;
                if(on_off){
                        
                               if((Boton<12)&&(Boton>-1)){
                                        //if(estacion_boton[botons]!=0){
                                                estacion_actual=estacion_boton[Boton];
                                                if((estacion_actual>=530)&&(estacion_actual<=1610)){
                                                        fm_am=false;
                                                }else{
                                                        fm_am=true;
                                                }
                                        //}else{                                                
                                        //}                     
                                }else{                                  
                                }
                                System.out.println(" -- Se ha seleccionado la estacion "+formatear.format(estacion_actual));
                           }  
                return (float) estacion_actual;
                
    }
    
    
    @Override
    public boolean IsOn()
    {
        return on_off;
    }
    
    @Override
    public boolean IsAm()
    {
        return fm_am;
    }
    
    @Override
    public float GetFreq()
    {
        return (float) estacion_actual;
    } 
    
}
